package com.jketing.service.db;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import com.jketing.entity.model.base.Area;
import com.jketing.repository.BaseRepository;
import com.jketing.repository.db.AreaRepository;
import com.jketing.service.BaseService;


/**
 *  RegionService	功能服务类
 * 	功能：基类实现单表CRUD及分页条件查询，继承扩展实现多表查询及多表操作等（若有需要）；
 * 		可注入其它实体的仓库类或使用jdbc实现Dao调用本地Sql进行多表查询
 * 
 * @author  李荣华
 * @version v1.0
 * @date    2017-11-18
 * @since   Spring-data 1.11.4
 */
@Service
public class AreaService {
	
	/**
	 * repository String按IOC容器管理的Bean类型自动注入模块仓库操作实例 .
	 */
	@Autowired
	private AreaRepository repository;
	
	
	public Area findOne(int id) {
		return repository.findOne(id);
	}
	
	/**
	 * getRegionListByGrade 按级别得到所有行政区域
	 * 
	 * @param grade 树型级别
	 * 
	 * @return List<Area> 返回行政区域列表
	 */
	public List<Area> getRegionListByGrade(String grade) {
		return repository.getRegionByGradeOrderById(grade);
	}
	
	/**
	 * getRegionByParentIdOrderByCode 按父级得到所有行政区域
	 * 
	 * @param id pk
	 * 
	 * @return List<Area> 返回行政区域列表
	 */
	public List<Area> getRegionByParentIdOrderByCode(Integer id) {
		return repository.getRegionByParentIdOrderByCode(id);
	}
	
	/**
	 *  getSort 	得到排序对象
	 *  
	 *  功能:根据排序字段名构建排序对象
	 * 
	 *  @param  String 	order		表单传来的排序字段名
	 *  
	 *  @return Sort 返回排序对象
	 */
	protected Sort getSort(final String order) {
		Sort sort = null;
		String sortType = null;
		if (order != null && order.length() > 0) {
			if (order.contains("desc")) {
				int index = order.indexOf("desc");// 查找“desc”在order中的索引
				sortType = order.substring(0, index).trim();// 截取掉“desc”
				sort = new Sort(Direction.DESC, sortType);
			} else {
				sortType = order.trim();
				sort = new Sort(Direction.ASC, sortType);
			}
		}
		return sort;
	}
	
	/**
	 *  getList 	得到所有记录的列表带排序
	 *  
	 *  @param  	String order 排序字段名
	 *  
	 *  @return		List<T>	结果列表
	 */
	public List<Area> getList(final String order) {	
		List<Area> list = null;
		Sort sort = getSort(order);
		if(sort != null){
			list = repository.findAll(sort);
		}else{
			list = repository.findAll();
		}
		return list;
	}
}
